﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using clBUS;
using System.IO;
using Microsoft.VisualBasic.FileIO;
using clEntidad;
using clEntidad.Ex;

namespace portero_.Admin
{
    public partial class frmCargaMasiva : Form
    {
        public frmCargaMasiva()
        {
            InitializeComponent();
        }

        private void tsbSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        private void cargaTipos()
        {
            cbTipo.Items.Clear();
            cbTipo.Items.Add("01-Equipos");
            cbTipo.Items.Add("02-Personas");
            cbTipo.Items.Add("03-Vehiculos");
            cbTipo.Items.Add("04-Llaves");

            cbTipo.SelectedIndex = 0;
        }
        private DataGridViewTextBoxColumn columna01;
        private DataGridViewTextBoxColumn columna02;
        private DataGridViewTextBoxColumn columna03;
        private DataGridViewTextBoxColumn columna04;
        private DataGridViewTextBoxColumn columna05;

        private DataGridViewTextBoxColumn columna06;

        private void frmCargaMasiva_Load(object sender, EventArgs e)
        {
            cargaTipos();
        }

        private void cbTipo_SelectedIndexChanged(object sender, EventArgs e)
        {
            cargarResto();
        }
        private void llenaElementos(String elemento, ComboBox cb)
        {
            BUSBase objBUS = new BUSBase(Constantes.CADENA_BD);
            List<String> elems = objBUS.getElementos(elemento);
            AutoCompleteStringCollection data = new AutoCompleteStringCollection();
            foreach (String cadena in elems)
            {
                data.Add(cadena);
            }
            cb.AutoCompleteCustomSource = data;
        }

        private void cargarResto()
        {
            cbJer.Text = "";
            if (cbTipo.SelectedIndex == 0)
            {
                //Carga Equipos
                lblJer.Visible = true;
                cbJer.Visible = true;
                cbJer.DropDownStyle = ComboBoxStyle.DropDown;
                cbJer.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                cbJer.AutoCompleteSource = AutoCompleteSource.CustomSource;
                cbJer.Text = "";
                cbJer.Items.Clear();

                lblJer.Text = "Tipo:";
                llenaElementos("tipo", cbJer);
                columna01 = new DataGridViewTextBoxColumn();
                columna02 = new DataGridViewTextBoxColumn();
                columna03 = new DataGridViewTextBoxColumn();

                columna01.HeaderText = "Num.Serie";
                columna01.Name = "num_serie";
                columna01.Width = 150;

                columna02.HeaderText = "Marca";
                columna02.Name = "marca";
                columna02.Width = 120;

                columna03.HeaderText = "Modelo";
                columna03.Name = "modelo";
                columna03.Width = 120;

                dgvElems.Columns.Clear();
                dgvElems.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
                    this.columna01,
                    this.columna02,
                    this.columna03});

            }
            if (cbTipo.SelectedIndex == 1)
            {
                //Carga Personas

                lblJer.Visible = true;
                cbJer.Visible = true;
                cbJer.DropDownStyle = ComboBoxStyle.DropDown;
                cbJer.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
                cbJer.AutoCompleteSource = AutoCompleteSource.CustomSource;
                cbJer.Text = "";
                cbJer.Items.Clear();
                lblJer.Text = "Empresa:";
                llenaElementos("empresa", cbJer);
                columna01 = new DataGridViewTextBoxColumn();
                columna02 = new DataGridViewTextBoxColumn();
                columna03 = new DataGridViewTextBoxColumn();
                columna04 = new DataGridViewTextBoxColumn();
                columna05 = new DataGridViewTextBoxColumn();

                columna01.HeaderText = "Num.Documento";
                columna01.Name = "num_doc";
                columna01.Width = 120;

                columna02.HeaderText = "Ape. Pat.";
                columna02.Name = "ape_pat";
                columna02.Width = 200;

                columna03.HeaderText = "Ape. Mat.";
                columna03.Name = "ape_mat";
                columna03.Width = 200;

                columna04.HeaderText = "Nombres";
                columna04.Name = "nombres";
                columna04.Width = 200;

                columna05.HeaderText = "Cargo";
                columna05.Name = "cargo";
                columna05.Width = 200;

                dgvElems.Columns.Clear();
                dgvElems.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
                    this.columna01,
                    this.columna02,
                    this.columna03,
                    this.columna04,
                    this.columna05});

            }
            if (cbTipo.SelectedIndex == 2)
            {
                //Carga Vehiculos
                lblJer.Visible = true;
                cbJer.Visible = true;
                cbJer.DropDownStyle = ComboBoxStyle.DropDownList;
                lblJer.Text = "Tipo:";
                cbJer.Items.Clear();
                cbJer.Items.Add("Corporativo");
                cbJer.Items.Add("Particular");
                cbJer.Items.Add("Visita");

                columna01 = new DataGridViewTextBoxColumn();
                columna02 = new DataGridViewTextBoxColumn();
                columna03 = new DataGridViewTextBoxColumn();
                columna04 = new DataGridViewTextBoxColumn();
                columna05 = new DataGridViewTextBoxColumn();

                columna01.HeaderText = "Placa";
                columna01.Name = "placa";
                columna01.Width = 120;

                columna02.HeaderText = "Descrip.";
                columna02.Name = "descrip";
                columna02.Width = 200;

                columna03.HeaderText = "Num. Doc.";
                columna03.Name = "num_doc";
                columna03.Width = 120;

                columna04.HeaderText = "Num. Serie";
                columna04.Name = "num_serie";
                columna04.Width = 120;

                dgvElems.Columns.Clear();
                dgvElems.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
                    this.columna01,
                    this.columna02,
                    this.columna03, this.columna04});
                cbJer.SelectedIndex = 0;
            }
            if (cbTipo.SelectedIndex == 3)
            {
                //Carga Vehiculos
                lblJer.Visible = false;
                cbJer.Visible = false;
                //cbJer.DropDownStyle = ComboBoxStyle.DropDownList;
                //lblJer.Text = "Tipo:";
                //cbJer.Items.Clear();
                //cbJer.Items.Add("Corporativo");
                //cbJer.Items.Add("Particular");



                columna01 = new DataGridViewTextBoxColumn();
                columna02 = new DataGridViewTextBoxColumn();
                columna03 = new DataGridViewTextBoxColumn();
                columna04 = new DataGridViewTextBoxColumn();
                columna05 = new DataGridViewTextBoxColumn();
                columna06 = new DataGridViewTextBoxColumn();

                columna01.HeaderText = "Codigo";
                columna01.Name = "codigo";
                columna01.Width = 100;

                columna02.HeaderText = "Descrip.";
                columna02.Name = "descrip";
                columna02.Width = 200;

                columna03.HeaderText = "Cant. Llaves";
                columna03.Name = "cant1";
                columna03.Width = 120;

                columna04.HeaderText = "Cant. Llaves M";
                columna04.Name = "cant2";
                columna04.Width = 120;

                columna05.HeaderText = "Cant. Llaves E";
                columna05.Name = "cant3";
                columna05.Width = 120;

                columna06.HeaderText = "Dias Alerta (0 Sin alerta)";
                columna06.Name = "alertaEN";
                columna06.Width = 120;

                dgvElems.Columns.Clear();
                dgvElems.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
                    this.columna01,
                    this.columna02,
                    this.columna03, this.columna04,this.columna05,this.columna06});
                cbJer.SelectedIndex = 0;
            }
        }

        private void cbJer_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.KeyChar = char.ToUpper(e.KeyChar);
        }

        private void tsbClean_Click(object sender, EventArgs e)
        {
            if (dgvElems.RowCount > 0)
            {
                if (MessageBox.Show("¿Esta seguro que desea limpiar los datos a cargar?", Constantes.cNOMBRE_SIS, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    dgvElems.Rows.Clear();
                }
            }
        }

        private void tsbCSV_Click(object sender, EventArgs e)
        {
            Stream myStream = null;
            tsslStatus.Text = "";
            if (ofdLoad.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if ((myStream = ofdLoad.OpenFile()) != null)
                    {
                        using (myStream)
                        {
                            dgvElems.Rows.Clear();
                            TextFieldParser parser = new TextFieldParser(myStream,Encoding.Default);
                            parser.TextFieldType = FieldType.Delimited;
                            parser.SetDelimiters(",");
                            
                            
                            while (!parser.EndOfData)
                            {
                                string[] stringRow = parser.ReadFields();
                                int ix = dgvElems.Rows.Add();
                                for (int iy = 0; iy < dgvElems.Columns.Count; iy++ )
                                {
                                    if (iy < stringRow.Length)
                                        dgvElems.Rows[ix].Cells[iy].Value = stringRow[iy].ToUpper();
                                }
                                
                            }
                            tsslStatus.Text = "Se cargaron " + dgvElems.Rows.Count.ToString();
                            parser.Close();
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: No se puede leer archivo: " + ex.Message, Constantes.cNOMBRE_SIS ,MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void tsbCargar_Click(object sender, EventArgs e)
        {
            if (dgvElems.Rows.Count == 0)
            {
                tsslStatus.Text = "No hay registros para cargar!";
                return;
            }
            if (MessageBox.Show("¿Proceder con la carga de datos?", Constantes.cNOMBRE_SIS, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                if (cbTipo.SelectedIndex == 0)
                {
                    List<Equipo> elems = new List<Equipo>();
                    foreach (DataGridViewRow row in dgvElems.Rows)
                    {
                        Equipo elem = new Equipo();
                        elem.numSerie = row.Cells[0].Value.ToString();
                        elem.tipo = cbJer.Text;
                        elem.marca = row.Cells[1].Value.ToString();
                        elem.modelo = row.Cells[2].Value.ToString();
                        elems.Add(elem);
                    }
                    BUSEquipo objBUS = new BUSEquipo(Constantes.CADENA_BD);
                    objBUS.grabarVarios(elems);
                    tsslStatus.Text = "Se cargaron los equipos correctamente";
                }
                if (cbTipo.SelectedIndex == 1)
                {
                    List<Persona> elems = new List<Persona>();
                    foreach (DataGridViewRow row in dgvElems.Rows)
                    {
                        Persona elem = new Persona();
                        elem.numDoc = row.Cells[0].Value.ToString();
                        elem.empresa = cbJer.Text;
                        elem.apePat = row.Cells[1].Value.ToString();
                        elem.apeMat = row.Cells[2].Value.ToString();
                        elem.nombres = row.Cells[3].Value.ToString();
                        if (row.Cells[4].Value != null)
                            elem.cargo = row.Cells[4].Value.ToString();
                        else
                            elem.cargo = "";
                        elem.visitado = new Visitado();
                        elem.visitado.nombre = "";
                        elem.visitado.ubicacion = "";
                        elem.visitado.area = "";
                        elems.Add(elem);
                    }
                    BUSPersona objBUS = new BUSPersona(Constantes.CADENA_BD);
                    objBUS.grabarVarios(elems);
                    tsslStatus.Text = "Se cargaron lista de personal correctamente";
                }
                if (cbTipo.SelectedIndex == 2)
                {
                    List<Vehiculo> elems = new List<Vehiculo>();
                    String tipo="";
                    if(cbJer.SelectedIndex==0) tipo="C";
                    if (cbJer.SelectedIndex == 1) tipo = "P";
                    if (cbJer.SelectedIndex == 2) tipo = "V";

                    foreach (DataGridViewRow row in dgvElems.Rows)
                    {
                        Vehiculo elem = new Vehiculo();
                        elem.codigo = row.Cells[0].Value.ToString();
                        elem.placa = row.Cells[0].Value.ToString();
                        elem.marca = row.Cells[1].Value.ToString();
                        elem.tipo = tipo;
                        if (row.Cells[2].Value != null)
                            elem.numDoc = row.Cells[2].Value.ToString();
                        else
                            elem.numDoc = "";
                        if (row.Cells[3].Value != null)
                            elem.equipoIn1.numSerie = row.Cells[3].Value.ToString();
                        else
                            elem.equipoIn1.numSerie = "";
                        if (tipo.Equals("C"))
                            elem.estado = "I";
                        else
                            elem.estado = "S";
                        elems.Add(elem);
                    }
                    BUSVehiculo objBUS = new BUSVehiculo(Constantes.CADENA_BD);
                    objBUS.grabarVarios(elems);
                    tsslStatus.Text = "Se cargaron lista de vehículos correctamente";
                }
                if (cbTipo.SelectedIndex == 3)
                {
                    try
                    {
                        List<Llave> elems = new List<Llave>();
                        foreach (DataGridViewRow row in dgvElems.Rows)
                        {
                            Llave elem = new Llave();
                            elem.codigo = row.Cells[0].Value.ToString();
                            elem.detalle = row.Cells[1].Value.ToString();
                            if (row.Cells[2].Value.ToString().Equals(""))
                                elem.cant1=0;
                            else
                                try
                                {
                                    elem.cant1 = int.Parse(row.Cells[2].Value.ToString());
                                }
                                catch (FormatException ex)
                                {
                                    throw new BUSException("Valor de Cantidad de llaves debe ser numérico, llave " + elem.codigo );
                                }
                            if (row.Cells[3].Value.ToString().Equals(""))
                                elem.cant2 = 0;
                            else
                                try
                                {
                                    elem.cant2 = int.Parse(row.Cells[3].Value.ToString());
                                }
                                catch (FormatException ex)
                                {
                                    throw new BUSException("Valor de Cantidad de llaves M debe ser numérico, llave " + elem.codigo);
                                }
                            if (row.Cells[4].Value.ToString().Equals(""))
                                elem.cant3 = 0;
                            else
                                try
                                {
                                    elem.cant3 = int.Parse(row.Cells[4].Value.ToString());
                                }
                                catch (FormatException ex)
                                {
                                    throw new BUSException("Valor de Cantidad de llaves E debe ser numérico, llave " + elem.codigo);
                                }
                            if (row.Cells[5].Value.ToString().Equals(""))
                                elem.alertaEn  = 0;
                            else
                                try
                                {
                                    elem.alertaEn  = int.Parse(row.Cells[5].Value.ToString());
                                }
                                catch (FormatException ex)
                                {
                                    throw new BUSException("Valor de días de alerta debe ser numérico, llave " + elem.codigo);
                                }
                            elem.estado = "S";

                            elems.Add(elem);
                        }
                        BUSLlave objBUS = new BUSLlave(Constantes.CADENA_BD);
                        objBUS.grabarVarios(elems);
                        tsslStatus.Text = "Se crearon las llaves correctamente";
                    }
                    catch (BUSException ex)
                    {
                        MessageBox.Show(ex.Message, "Error al cargar datos", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }

        }

        private void cbJer_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(cbTipo.SelectedIndex ==2){
                if (cbJer.SelectedIndex == 0)
                {
                    dgvElems.Columns[2].Width = 0;
                    dgvElems.Columns[3].Width = 0;
                }
                else
                {
                    dgvElems.Columns[2].Width = 120;
                    dgvElems.Columns[3].Width = 120;
                }
            }

        }
    }
}
